"Bir vahid" xətası
![](http://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Fencepost_error.svg/220px-Fencepost_error.svg.png)
"Bir vahid" xətası (off-by-one error-OBOE) – proqramlaşdırmada: hər hansı əməlin yerinə yetirilmələrinin sayını bir vahid azaltdıqda, yaxud artırdıqda meydana çıxan xəta. Tutaq ki, verilmiş massivin m-dən n-dək (daxil olmaqla) elementləri emal olunmalıdır. Burada cəmi neçə element var? İntuitiv cavab n−m ola bilər, ancaq bu, "bir vahid"i nümayiş etdirən "çəpər dirəyi" xətasıdır (FENCEPOST ERROR); düzgün cavab n−m+1 olacaq. Ona görə də hesablama aralıqlarını çox zaman yarım-açıq intervallar vasitəsilə göstərirlər; "bir vahid" xətalarından qaçmaq üçün m-dən n-dək (daxil olmaqla) aralıq m-dən (daxil olmaqla) n+1-dək aralıq kimi göstərilir. Məsələn, beş dəfə təkrarlanan dövrü 0-dan 5-dək yarımaçıq interval kimi yazmaq olar:
for (i = 0; i < 5; i++) {
/* Body of the loop */
}
Dövrün gövdəsi öncə i-nin 0 qiyməti üçün yerinə yetirilir; sonra i ardıcıl iterasiyalarla 1, 2, 3 və sonda 4 olur. Bu nöqtədə i-nin qiyməti 5 olur və bu halda i < 5 yalan olduğundan dövr sona çatır. Ancaq müqayisə üçün <= (kiçik, yaxud bərabərdir) operatorundan istifadə oluncaydı, onda dövr altı dəfə yerinə yetirilərdi: bu halda i dəyişəni 0, 1, 2, 3, 4 və 5 qiymətlərini alır. Eyni zamanda, əgər i dəyişəninə başlanğıc qiymət olaraq 0 deyil, 1 mənimsədilsə idi, onda iterasiyaların sayı 4 olardı: bu halda i dəyişəni 1, 2, 3 və 4 qiymətlərini alır. Bu iki halın hər biri "bir vahid" xətasına səbəb ola bilər. Proqramlaşdırma dilləri arasındakı fərqlər massivlə bağlı bolaşıqlıqlar yarada bilər. Belə ki, əksər dillərdə massivin elementlərinin nömrələnməsi 0-dan başlanır, ancaq bəzi dillərdə ilk elementin nömrəsi 1 götürülür. Pascal dilində isə ilk elementin nömrəsini istifadəçi özü müəyyən edə bilir.
Ədəbiyyat
[redaktə | mənbəni redaktə et]- İsmayıl Calallı (Sadıqov), "İnformatika terminlərinin izahlı lüğəti", 2017, "Bakı" nəşriyyatı, 996 s.
Xarici keçidlər
[redaktə | mənbəni redaktə et]Off-by-one error haqqında nümunələr
OBOE Arxivləşdirilib 2017-11-26 at the Wayback Machine